package com.leetcode.递归.从尾到头打印链表;

import java.util.ArrayList;

/**
 * <p>
 * 参考：https://www.nowcoder.com/practice/d0267f7f55b3412ba93bd35cfa8e8035?tpId=13&tqId=11156&rp=1&ru=%2Fta%2Fcoding-interviews&qru=%2Fta%2Fcoding-interviews%2Fquestion-ranking&tab=answerKey
 * </p>
 *
 * @author: Sunny
 * @date: 2021/3/11
 * @version: v1.0.0
 */
public class Main {

    public static void main(String[] args) {
        ListNode node1 = new ListNode(67);

        ListNode node2 = new ListNode(0);
        node1.next = node2;

        ListNode node3 = new ListNode(24);
        node2.next = node3;

        ListNode node4 = new ListNode(58);
        node3.next = node4;

        System.out.println(node1);

        Main main = new Main();
        System.out.println(main.printListFromTailToHead(node1));

    }

    /**
     * list：有序，按照写入的顺序有序。e.g 增加1、3、4、2，则打印list也是1、3、4、2。
     * ArrayList、LinkedList都是有序的。
     * set：无需。
     */
    ArrayList<Integer> list = new ArrayList<>();

    /**
     * 递归方式解决
     * @param listNode
     * @return
     */
    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
        if (listNode != null) {
            printListFromTailToHead(listNode.next);
            list.add(listNode.val);
        }
        return list;
    }

    /**
     * 非递归
     * @param listNode
     * @return
     */
//    public ArrayList<Integer> printListFromTailToHead(ListNode listNode) {
//        ArrayList<Integer> list = new ArrayList<>();
//        while (true) {
//            if (listNode == null) {
//                break;
//            }
//            list.add(listNode.val);
//            listNode = listNode.next;
//        }
//        Collections.reverse(list);
//        // 将list反转
////        ArrayList<Integer> list1 = new ArrayList<>();
////        for (int i = list.size() - 1; i >= 0; i--) {
////            list1.add(list.get(i));
////        }
//        return list;
//    }

}
